package com.xbongbong.paas.service.stage;

import com.xbongbong.paas.domain.entity.PaasStageEntity;
import com.xbongbong.paas.pojo.vo.StageGetVO;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.saas.domain.entity.StageWorkEntity;

import java.util.List;

/**
 * 阶段设置策略
 * @author 李少杰
 * @version v1.0.0
 * @date 2021/11/22 08:58
 */
public interface StageSettingsStrategy {

    /**
     * 阶段类型【0普通流程阶段、1结束阶段-成功、2结束阶段-失败】
     * @See com.xbongbong.paas.enums.StageTypeEnum
     * @return
     */
    Integer type();

    /**
     * 获取阶段
     * @param paasStageEntity
     * @return
     * @throws XbbException
     */
    StageGetVO get(PaasStageEntity paasStageEntity, List<StageWorkEntity> stageWorkEntityList) throws XbbException;

    /**
     * 校验阶段
     * @param paasStageEntityList
     * @throws XbbException
     */
    void check(List<PaasStageEntity> paasStageEntityList, Integer businessType) throws XbbException;

    /**
     * 校验阶段任务
     * @param paasStageEntity 阶段实体
     * @param stageWorkEntityList 阶段任务列表
     * @throws XbbException
     */
    void checkStageWork(PaasStageEntity paasStageEntity, List<StageWorkEntity> stageWorkEntityList) throws XbbException;
}
